<?php
//Ultima verificacion: 14-10-2014 ; 21-11-2014 ; 04-03-2015
class M_sancion extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener las sanciones activas e inactivas menos las borradas (-1)
	function buscar($restriccion=null){
		$consulta = $this->db->query("SELECT sancion.*, persona.apellido, persona.nombre,
											(SELECT nombre FROM tiposancion WHERE tiposancion.idTipoSancion=sancion.idTipoSancion AND tiposancion.estado<>-1 LIMIT 1) AS tipoSancion, 
											(SELECT hash FROM archivo WHERE archivo.idArchivo=sancion.idArchivo LIMIT 1) AS hashArchivo,
											DATE_FORMAT(sancion.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											DATE_FORMAT(sancion.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada,
											DATE_FORMAT(sancion.fechaOcurrencia,'%d/%m/%Y') AS fechaOcurrenciaFormateada
									  FROM sancion, alumnoxdivision, division, curso, alumno, persona
									  WHERE sancion.idAxD=alumnoxdivision.idAxD AND 
									        alumnoxdivision.idDivision=division.idDivision AND 
											division.idCurso=curso.idCurso AND 
											alumnoxdivision.idAlumno=alumno.idAlumno AND
											alumno.idPersona=persona.idPersona AND
											sancion.estado<>-1 AND 
											alumnoxdivision.estado=1 AND 
											division.estado=1 AND 
											curso.estado=1 AND 
											alumno.estado=1 AND 
											persona.estado=1 $restriccion
									  ORDER BY persona.apellido ASC, persona.nombre ASC");
		return($consulta);
	}
			
	//Este metodo se utiliza cuando queremos obtener las sanciones activas (1)
	function buscarActivos($restriccion=null){
		$consulta = $this->db->query("SELECT sancion.*, persona.apellido, persona.nombre,
											(SELECT nombre FROM tiposancion WHERE tiposancion.idTipoSancion=sancion.idTipoSancion AND tiposancion.estado<>-1 LIMIT 1) AS tipoSancion, 
											(SELECT hash FROM archivo WHERE archivo.idArchivo=sancion.idArchivo LIMIT 1) AS hashArchivo,
											DATE_FORMAT(sancion.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											DATE_FORMAT(sancion.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada,
											DATE_FORMAT(sancion.fechaOcurrencia,'%d/%m/%Y') AS fechaOcurrenciaFormateada
									  FROM sancion, alumnoxdivision, division, curso, alumno, persona
									  WHERE sancion.idAxD=alumnoxdivision.idAxD AND 
									        alumnoxdivision.idDivision=division.idDivision AND 
											division.idCurso=curso.idCurso AND 
											alumnoxdivision.idAlumno=alumno.idAlumno AND
											alumno.idPersona=persona.idPersona AND
											sancion.estado=1 AND 
											alumnoxdivision.estado=1 AND 
											division.estado=1 AND 
											curso.estado=1 AND 
											alumno.estado=1 AND 
											persona.estado=1 $restriccion
									  ORDER BY persona.apellido ASC, persona.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos saber la cantidad de sanciones de un alumno
	function buscarCantidad($restriccion=null){
		$consulta = $this->db->query("SELECT COUNT(sancion.idSancion) AS cantidad
									  FROM sancion, alumnoxdivision, division, curso, alumno, persona
									  WHERE sancion.idAxD=alumnoxdivision.idAxD AND 
									        alumnoxdivision.idDivision=division.idDivision AND 
											division.idCurso=curso.idCurso AND 
											alumnoxdivision.idAlumno=alumno.idAlumno AND
											alumno.idPersona=persona.idPersona AND
											sancion.estado=1 AND 
											alumnoxdivision.estado=1 AND 
											division.estado=1 AND 
											curso.estado=1 AND 
											alumno.estado=1 AND 
											persona.estado=1 $restriccion");
		return($consulta);
	}
	
	//Este metodo se utiliza para eliminar una sancion
	function eliminar($idSancion=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `sancion` 
									 SET `estado` = -1,
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `sancion`.`idSancion` = " . $this->db->escape($idSancion) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para crear una sancion
	function crear($fechaOcurrencia=null, $idTipoSancion=null, $idAxD=null, $titulo=null, $descripcion=null, $idArchivo=null, $estado=null, $idCreador=null){
		$this->db->query("INSERT INTO `sancion` (`idSancion`,`fechaOcurrencia`,`idTipoSancion`,`idAxD`,`titulo`,`descripcion`,`idArchivo`,`fechaCreacion`,`estado`,`idCreador`) VALUES 
										        (NULL,".$this->db->escape($fechaOcurrencia).",".$this->db->escape($idTipoSancion).",".$this->db->escape($idAxD).",".$this->db->escape($titulo).",".$this->db->escape($descripcion).",".$this->db->escape($idArchivo).",now(),".$this->db->escape($estado).",".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos devolver una sancion en particular usado generalmente en el formulario de modificar
	function get($idSancion=null, $restriccion=null){
		$consulta = $this->db->query("SELECT sancion.*, curso.idCicloLectivo, persona.idPersona AS idPersona,
											(SELECT nombre FROM tiposancion WHERE tiposancion.idTipoSancion=sancion.idTipoSancion AND tiposancion.estado<>-1 LIMIT 1) AS tipoSancion, 
											(SELECT hash FROM archivo WHERE archivo.idArchivo=sancion.idArchivo LIMIT 1) AS hashArchivo, 
											DATE_FORMAT(sancion.fechaOcurrencia,'%d/%m/%Y') AS fechaOcurrenciaFormateada,
											DATE_FORMAT(sancion.fechaOcurrencia,'%d-%m-%Y') AS fechaOcurrenciaFormateada2
									  FROM sancion, alumnoxdivision, division, curso, alumno, persona
									  WHERE sancion.idAxD=alumnoxdivision.idAxD AND
											alumnoxdivision.idDivision=division.idDivision AND
											division.idCurso=curso.idCurso AND
											alumnoxdivision.idAlumno=alumno.idAlumno AND
											alumno.idPersona=persona.idPersona AND
											sancion.estado<>-1 AND
											alumnoxdivision.estado<>-1 AND
											division.estado<>-1 AND
											curso.estado<>-1 AND
											alumno.estado<>-1 AND
											persona.estado<>-1 AND
										    sancion.idSancion=".$this->db->escape($idSancion)." $restriccion
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos devolver la sancion contigua a una en particular usado generalmente en el formulario de modificar
	function getContiguo($idSancion=null, $cant=null, $idCicloLectivo=null, $idAxD=null){
		if($idCicloLectivo != 0 && $idAxD != 0){
			do{
				$idSancion+=$cant;
				$consulta = $this->db->query("SELECT sancion.*, curso.idCicloLectivo
											  FROM sancion, alumnoxdivision, division, curso
											  WHERE sancion.idAxD=alumnoxdivision.idAxD AND
													alumnoxdivision.idDivision=division.idDivision AND
													division.idCurso=curso.idCurso AND
													sancion.idSancion=".$this->db->escape($idSancion)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estado=='-1' || $consulta->row()->idCicloLectivo != $idCicloLectivo || $consulta->row()->idAxD != $idAxD);
		}
		
		if($idCicloLectivo != 0 && $idAxD == 0){
			do{
				$idSancion+=$cant;
				$consulta = $this->db->query("SELECT sancion.*, curso.idCicloLectivo
											  FROM sancion, alumnoxdivision, division, curso
											  WHERE sancion.idAxD=alumnoxdivision.idAxD AND
													alumnoxdivision.idDivision=division.idDivision AND
													division.idCurso=curso.idCurso AND
													sancion.idSancion=".$this->db->escape($idSancion)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estado=='-1' || $consulta->row()->idCicloLectivo != $idCicloLectivo);
		}
		
		if($idCicloLectivo == 0 && $idAxD != 0){
			do{
				$idSancion+=$cant;
				$consulta = $this->db->query("SELECT sancion.*, curso.idCicloLectivo
											  FROM sancion, alumnoxdivision, division, curso
											  WHERE sancion.idAxD=alumnoxdivision.idAxD AND
													alumnoxdivision.idDivision=division.idDivision AND
													division.idCurso=curso.idCurso AND
													sancion.idSancion=".$this->db->escape($idSancion)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estado=='-1' || $consulta->row()->idAxD != $idAxD);
		}
		
		if($idCicloLectivo == 0 && $idAxD == 0){
			do{
				$idSancion+=$cant;
				$consulta = $this->db->query("SELECT sancion.*, curso.idCicloLectivo
											  FROM sancion, alumnoxdivision, division, curso
											  WHERE sancion.idAxD=alumnoxdivision.idAxD AND
													alumnoxdivision.idDivision=division.idDivision AND
													division.idCurso=curso.idCurso AND
													sancion.idSancion=".$this->db->escape($idSancion)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estado=='-1');
		}
		
		return($consulta->row()->idSancion);
	}
	
	//Este metodo se utiliza cuando queremos devolver la sancion contigua a una en particular usado generalmente en el formulario de visualizar sancion
	function getContiguoActivo($idSancion=null, $cant=null, $idCicloLectivo=null, $idAxD=null){
		if($idCicloLectivo != 0 && $idAxD != 0){
			do{
				$idSancion+=$cant;
				$consulta = $this->db->query("SELECT sancion.*, curso.idCicloLectivo
											  FROM sancion, alumnoxdivision, division, curso
											  WHERE sancion.idAxD=alumnoxdivision.idAxD AND
													alumnoxdivision.idDivision=division.idDivision AND
													division.idCurso=curso.idCurso AND
													sancion.idSancion=".$this->db->escape($idSancion)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estado=='-1' || $consulta->row()->estado=='0' || $consulta->row()->idCicloLectivo != $idCicloLectivo || $consulta->row()->idAxD != $idAxD);
		}
		
		if($idCicloLectivo != 0 && $idAxD == 0){
			do{
				$idSancion+=$cant;
				$consulta = $this->db->query("SELECT sancion.*, curso.idCicloLectivo
											  FROM sancion, alumnoxdivision, division, curso
											  WHERE sancion.idAxD=alumnoxdivision.idAxD AND
													alumnoxdivision.idDivision=division.idDivision AND
													division.idCurso=curso.idCurso AND
													sancion.idSancion=".$this->db->escape($idSancion)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estado=='-1' || $consulta->row()->estado=='0' || $consulta->row()->idCicloLectivo != $idCicloLectivo);
		}
		
		if($idCicloLectivo == 0 && $idAxD != 0){
			do{
				$idSancion+=$cant;
				$consulta = $this->db->query("SELECT sancion.*, curso.idCicloLectivo
											  FROM sancion, alumnoxdivision, division, curso
											  WHERE sancion.idAxD=alumnoxdivision.idAxD AND
													alumnoxdivision.idDivision=division.idDivision AND
													division.idCurso=curso.idCurso AND
													sancion.idSancion=".$this->db->escape($idSancion)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estado=='-1' || $consulta->row()->estado=='0' || $consulta->row()->idAxD != $idAxD);
		}
		
		if($idCicloLectivo == 0 && $idAxD == 0){
			do{
				$idSancion+=$cant;
				$consulta = $this->db->query("SELECT sancion.*, curso.idCicloLectivo
											  FROM sancion, alumnoxdivision, division, curso
											  WHERE sancion.idAxD=alumnoxdivision.idAxD AND
													alumnoxdivision.idDivision=division.idDivision AND
													division.idCurso=curso.idCurso AND
													sancion.idSancion=".$this->db->escape($idSancion)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estado=='-1' || $consulta->row()->estado=='0');
		}
		
		return($consulta->row()->idSancion);
	}
			
	//Este metodo se utiliza para modificar una sancion
	function modificar($idSancion=null, $fechaOcurrencia=null, $idTipoSancion=null, $idAxD=null, $titulo=null, $descripcion=null, $idArchivo=null, $estado=null){
		$consulta = $this->db->query("UPDATE `sancion` 
									 SET `fechaOcurrencia` = ". $this->db->escape($fechaOcurrencia) .",
										 `idTipoSancion` = ". $this->db->escape($idTipoSancion) .",
									     `idAxD` = ". $this->db->escape($idAxD) .",
									     `titulo` = ". $this->db->escape($titulo) .",
										 `descripcion` = ". $this->db->escape($descripcion) .",
										 `idArchivo` = ". $this->db->escape($idArchivo) .",
										 `estado` = ". $this->db->escape($estado) ."
							         WHERE `sancion`.`idSancion` = " . $this->db->escape($idSancion) . " LIMIT 1");
		return($this->db->affected_rows());
	}
}
?>